//
//  HMHomeTableViewController.swift
//  Black22
//
//  Created by Apple on 16/11/18.
//  Copyright © 2016年 KY. All rights reserved.
//

import UIKit
import YYModel

//  重用标记
private let HMHomeTableViewCellIdentifier = "HMHomeTableViewCellIdentifier"
class HMHomeTableViewController: HMVisitorTableViewController {

    //  对应的viewModel
    fileprivate lazy var statusListViewModel: HMStatusViewListModel = HMStatusViewListModel()
    // MARK:    --懒加载控件
    fileprivate lazy var footerRefreshView: UIActivityIndicatorView = {
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)
        view.color = UIColor.red
        return view
        
    }()
    //  头部刷新系统控件
    fileprivate lazy var headerRefreshView: UIRefreshControl = {
        let control = UIRefreshControl()
        //  添加刷新事件
        control.addTarget(self, action: #selector(headerRefreshOperation), for: .valueChanged)
        return control
    }()
    //  自定义刷新控件
    fileprivate lazy var pullDownView: HMRefreshControl = {
        let ctr = HMRefreshControl()
        //  添加刷新事件
        ctr.addTarget(self, action: #selector(headerRefreshOperation), for: .valueChanged)
    
        return ctr
    }()
    //  tip动画控件
    fileprivate lazy var tipLabel: UILabel = {
        let label = UILabel(fontSize: 12, textColor: UIColor.white)
        label.backgroundColor = UIColor.orange
        label.textAlignment = .center
        //  默认隐藏
        label.isHidden = true
        return label
    }()
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        if isLogin {
            
            setupUI()
            loadData()
            
        } else {
            
            visitorView?.updateVisitorInfo(message: nil, imageName: nil)
        }
        
    }
    
    private func setupUI() {
        setTableView()
        //  添加控件到导航控制器的视图上
        if let nav = self.navigationController {
            nav.view.insertSubview(tipLabel, belowSubview: nav.navigationBar)
            //  设置frame
            tipLabel.frame = CGRect(x: 0, y: nav.navigationBar.frame.maxY - 35, width: nav.navigationBar.width, height: 35)
        }
    
    }
    
    // MARK:    --开启tip动画
    private func startAnimation(message: String) {
        
        if tipLabel.isHidden == false {
            return
        }
        
        //  让其显示
        tipLabel.isHidden = false
        tipLabel.text = message
        
        UIView.animate(withDuration: 1, animations: {
            self.tipLabel.transform = CGAffineTransform(translationX: 0, y: 35)
        }, completion: { (_) -> Void in
        
            UIView.animate(withDuration: 1, animations: { 
                self.tipLabel.transform = CGAffineTransform.identity
            }, completion: { (_) in
                self.tipLabel.isHidden = true
            })
            
        })
    }
    
    
    //  请求微博数据
    func loadData() {
        
        statusListViewModel.loadData(isUp: footerRefreshView.isAnimating) { (isSuccess, message) in
            
            if !self.footerRefreshView.isAnimating {
                self.startAnimation(message: message)
            }
            
            //  结束刷新请求
            self.endRefreshing()
            
            if isSuccess {
                self.tableView.reloadData()
            }
        }
        
    }

    //  设置tableview
    private func setTableView() {
        //  注册cell
        tableView.register(HMHomeTableViewCell.self, forCellReuseIdentifier: HMHomeTableViewCellIdentifier)
        //  设置自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
        //  设置预估高度
        tableView.estimatedRowHeight = 200
        //  设置线隐藏
        tableView.separatorStyle = .none
        
        //  添加tableview底部刷新视图
        tableView.tableFooterView = footerRefreshView
        //  确定大小
        footerRefreshView.sizeToFit()
        
        //  两种方式顶部刷新
//        self.refreshControl = headerRefreshView
        
        //  添加tableview顶部刷新视图
//        tableView.addSubview(headerRefreshView)
        
        //  自定义刷新控件
        tableView.addSubview(pullDownView)
        
    
    }
    
    // MARK:    --头部刷新
    @objc private func headerRefreshOperation() {
        print("哈哈，我要进行下拉刷新")
        loadData()
    }
    
    
    //  数据请求完成后，结束刷新
    fileprivate func endRefreshing() {
        //  头部刷新结束
        headerRefreshView.endRefreshing()
        //  微博刷新结束
        footerRefreshView.stopAnimating()
        //  自定义刷新结束
        pullDownView.endRefreshing()
        
    }
    
   
    
    
}


extension HMHomeTableViewController {

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.statusList.count
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: HMHomeTableViewCellIdentifier, for: indexPath) as! HMHomeTableViewCell
        //  模型viewMode模型数据
        cell.statusViewModel = statusListViewModel.statusList[indexPath.row]
        
        //  不让其选中
        cell.selectionStyle = .none
        return cell
    }
    
    //  在将要显示那个cell的时候判断是否进入了最后一个cell
    override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        if indexPath.row == statusListViewModel.statusList.count - 1  && !footerRefreshView.isAnimating {
            //  最后一个cell，开启动画
            //  开启动画
            footerRefreshView.startAnimating()
            print("最后一个cell 了")
            loadData()
        }
    }
}












